转载来自:
index.html
上传示例 下面上传文件到中间脚本:
upload.php
* @site http://straiway.sinaapp.com */if (empty($_FILES['file'])) { exit('没有上传指定名称的文件');} // 先保存到本地,再上传$file = $_FILES['file'];$file_name = __DIR__ . "/{ $file['name']}";move_uploaded_file($_FILES['file']['tmp_name'], $file_name); // 本地测试时,可能需要更改下面的URL$ch = curl_init('http://localhost/test/upload_via_curl.php'); // 从php5.5开始,反对使用"@"前缀方式上传,可以使用CURLFile替代;// 据说php5.6开始移除了"@"前缀上传的方式if (class_exists('CURLFile')) { $file = new CURLFile($file_name); // 禁用"@"上传方法,这样就可以安全的传输"@"开头的参数值 curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true);} else { $file = "@{ $file_name}";} // 从php5.2开始,要上传文件,必须给CURLOPT_POSTFIELDS传递数组,而不是字符串。// 也只有传递数组,http头部的"Content-Type"才会设置成"multipart/form-data"curl_setopt($ch, CURLOPT_POSTFIELDS, array('file_via_curl' => $file)); // 将传输结果作为curl_exec的返回值,而不是直接输出curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch);$error = curl_error($ch); if ($result) { $result_array = json_decode($result, true); if ($result_array) { if ($result_array['status']) { exit("上传成功!curl返回图片地址:{ $result_array['data']['url']}"); } else { exit("curl上传失败!错误信息:{ $result['info']}"); } } else { exit("发生错误,curl返回结果:{ $result}"); }} else { exit('curl请求发生错误' . var_export($error, true));}
upload_curl.php
* @site http://straiway.sinaapp.com */ if (empty($_FILES['file_via_curl'])) { $return = array('status' => 0, 'info' => '没有上传指定名称的文件');} else { // 保存文件 $file = $_FILES['file_via_curl']; // 重命名文件,便于识别 $base_name = explode('.', $file['name']); $base_name[0] .= '_upload_var_curl'; $base_name = implode('.', $base_name); $file_name = __DIR__ . "/{ $base_name}"; if (move_uploaded_file($file['tmp_name'], $file_name)) { // 本地测试时,可能需要更改下面的URL $url = "http://localhost/test/{ $base_name}"; $return = array('status' => 1, 'info' => '上传成功', 'data' => array('url' => $url)); } else { $return = array('status' => 0, 'info' => '上传失败'); }} exit(json_encode($return));